#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>

void sig_catch(int signo)
{
	if (signo == SIGHUP)
	{
		printf("%u catch SIGHUP\n",getpid());
	}
}

/*
 * fork后子进程保留父进程的信号处理方式。
 * 除非使用exec加载新程序后，才会恢复默认的处理方式
 * */

int main()
{
	pid_t pid;
	signal(SIGHUP, sig_catch);

	pid = fork();
	if (pid < 0)
	{
	} else if (pid == 0)
	{
		printf("child %u\n",getpid());
		sleep(1);
	}
    else {
		printf("father %u\n",getpid());
		kill(pid, SIGHUP);
	}
	return 0;
}
